《Language Models are Few-Shot Learners》论文阅读

论文:Language Models are Few-Shot Learners


标题是什么意思?

标题"Language Models are Few-Shot Learners"中的几个关键词:

  1. [000.wiki/语言模型|Language Model]: 指的是使用大量文本数据训练出来的人工智能模型,它能够生成看起来很自然的语言。常见的语言模型有GPT、BERT等。

  2. [000.wiki/少样本学习|Few-Shot Learning]: 传统的机器学习方法需要大量的标记数据进行训练,而少量示例学习指的是仅用很少量的示例数据(几十个),就能让模型学会完成新的任务。

放在一起意思是:语言模型具有少量示例学习的能力。也就是说,我们训练好的语言模型,在看到少量的新示例后,就能快速适应并完成新的任务,而不需要大量的重新训练。

这种能力很神奇,因为一般的机器学习模型需要成千上万的训练样本才能完成新任务。而语言模型则通过在大量自然语言上的训练,获得了一些 "通用"的知识和理解能力,因此仅用少量示例就能快速适应新领域、新任务。这使得语言模型在许多实际应用中表现出色。

Note

我们强调,这些“学习”曲线不涉及梯度更新或微调,只是增加作为调节的演示(Prompt)数量。


Few-Shot

很好的问题,让我详细解释一下Few-Shot和One-Shot Learning的概念:

[000.wiki/少样本学习|Few-Shot Learning]:

[000.wiki/一次性学习|One-Shot Learning]:

人类具有这种强大的一次示例学习能力。比如,我们只需看到一次新事物,就能概括出它的特征并识别出同类事物。而传统的机器学习算法通常需要数以千计的示例才能学习。

Few-Shot和One-Shot Learning之所以令人称奇,是因为它们展现了人工智能模型在小数据环境下迁移和泛化能力的巨大进步。这使得AI模型不再完全依赖大规模标注数据,能以更小的代价扩展到新领域。


Abstract

在大量文本语料库上进行预训练,然后在特定任务上进行微调,在许多NLP任务和基准测试中取得了显著的提升。

虽然在架构上通常是任务无关(task-agnostic)的,但这种方法仍然需要数千或数万个示例的任务特定微调数据集。

相比之下,人类通常只需要几个例子或简单的指示就能执行新的语言任务–这是目前的NLP系统在很大程度上仍然难以做到的。

在这里,我们发现大幅度扩展语言模型的规模极大地提高了任务无关的少量示例性能,有时甚至达到了与先前微调方法相当的状态。

具体来说,我们训练了GPT-3,这是一个具有1750亿参数的自回归语言模型,比任何以前的非稀疏语言模型都大10倍,并测试了它在少量示例设置下的性能。

对于所有任务,GPT-3都是在没有任何梯度更新或微调的情况下应用的,任务和少量示例演示纯粹通过与模型的文本交互来指定

GPT-3在许多NLP数据集上表现出色,包括翻译、问答和完形填空任务,以及一些需要即时推理或领域适应的任务,如单词解混、在句子中使用新单词或进行三位数算术运算。

同时,我们也发现了一些GPT-3在少量示例学习上仍然存在困难的数据集,以及一些GPT-3在基于大型网络语料库训练时面临方法问题的数据集。

最后,我们发现GPT-3能够生成新闻文章的样本,人类评估者很难区分这些样本是否由人类撰写。

我们讨论了这一发现以及GPT-3的更广泛的社会影响。


元学习

[000.wiki/元学习|元学习]。这幅图描绘了大型语言模型在无监督预训练过程中如何通过元学习(meta-learning)获得快速适应各种任务的能力。

这张图描绘了一种特殊的大型计算机程序是如何变得很聪明的(元学习)。

最开始,这个程序就像一个没有什么知识的小朋友,它需要通过"学习"来获取知识。它会阅读大量的书本、文章等学习资料,就像我们上课时听老师讲课一样。

在这个过程中,这个程序不仅学会了语言的基本规则,还发现了很多有趣的小游戏和练习题,比如数学算术题、猜谜游戏等。通过一次次练习,它逐渐掌握了解决这些小问题的技能

最终,经过长期学习,这个程序不仅获得了语言知识,还培养了解决各种小问题的能力。它变得非常聪明了。

当我们给它出一个新的问题时,它能够根据之前学到的知识和技能,快速理解并解决这个新问题,就好像我们给小朋友出了一个新的数学题或脑筋急转弯一样。

这张图中的三组小问题,就代表了这个程序在学习过程中练习的各种游戏,包括算数题、词语联想游戏和语言翻译游戏等等。通过不断练习,它获得了解决各种问题的本领。

这就是这个特殊程序为何如此聪明的秘诀。

Pasted image 20240311121326.png

主要思路如下:

  1. 外层循环(outer loop)表示整个无监督预训练过程。

  2. 在预训练过程中,语言模型在学习到语言的一般模式的同时,也在通过遇到的各种子任务(如算术、词语关联等)进行元学习,获得一种广泛的技能和模式识别能力。

  3. 内层循环(inner loop)展示了在每个序列(sequence)的前向传播中,语言模型如何利用所获得的元能力快速适应和识别当前的子任务。这种在上下文中快速学习的过程被称为"In-Context Learning"。

  4. 图中的三个序列分别包含了算术、词语关联和语言翻译等不同类型的子任务,说明语言模型需要学习适应各种任务。但这些序列并不代表预训练数据,只是为了说明单个序列中可能嵌入了重复出现的子任务。

  5. 通过在海量数据上的预训练和元学习,语言模型获得了快速适应各种新任务的能力,使其在推理阶段能够基于很少或无标注数据就完成新任务,这种能力被称为"Few-Shot Learning"。

总的来说,这张图解释了大型语言模型是如何通过无监督的预训练和元学习过程,获得快速适应各种任务的泛化能力。这种能力使得语言模型不再严重依赖大量标注数据,从而在实际应用中展现出通用和高效的优势。


预训练与微调范式中的数据分布偏差风险

预训练加微调范式存在的一个潜在风险 –– 模型可能过度拟合训练数据中的偶然相关性,从而导致泛化能力受限。具体来说:

  1. 随着模型表达能力增强和训练数据分布变窄,模型趋向于利用训练数据中的偶然相关性,而不是学习到底层的因果规律

  2. 在预训练阶段,我们使用大模型来吸收海量信息;但在微调阶段,模型只在一个很窄的任务分布上进行学习,这可能加剧了对偶然相关性的过度拟合。

  3. 一些研究发现,在这种范式下,大模型的[000.wiki/出分布|出分布]泛化能力并不一定会更好。模型可能过于专注于训练数据的分布,而无法很好地推广到新的数据分布。

  4. 因此,尽管在某些基准测试中,微调后的模型可以达到人类水平的表现,但其实际上对潜在任务的泛化效果可能被夸大了。

预训练加微调虽然是一种行之有效的范式,但也存在一些潜在缺陷,特别是在模型容量与任务数据分布失衡的情况下。为了提高模型的泛化能力,我们需要注意数据分布的代表性,避免模型过度利用训练数据的偶然相关性。此外,更加注重因果建模,而不是简单的模式匹配,也许是一个值得探索的方向。


数据污染(Data Contamination)

具体来说,当我们使用像Common Crawl这样的网络爬取数据集来训练大型模型时,训练数据可能会不小心包含了一些测试数据集的内容。这是因为测试数据集中的一些内容本身就来自于互联网,被网络爬虫采集到了训练数据中。

这种训练数据和测试数据的重叠被称为"数据污染"。它会导致评估结果失真,因为模型在训练阶段就"看过"了测试数据,从而在测试时表现出了不公平的高分。

作者专门开发了系统工具来测量和量化数据污染对评估结果的影响程度。他们发现,对于大多数数据集,数据污染对GPT-3的表现影响较小。但也确实发现了一些数据集,其测试结果可能被数据污染所inflating(夸大)。

对于这种情况,作者要么完全不报告该数据集的结果,要么在报告结果时标注星号,具体取决于污染的严重程度。


模型规模与元学习能力

我们还训练了一系列较小的模型(从 1.25 亿个参数到 130 亿个参数),以便将它们在零次、一次和少样本设置下的性能与 GPT-3 进行比较。总的来说,对于大多数任务,我们发现在所有三种设置中模型容量的扩展都相对平滑;一个值得注意的模式是,零次、一次和几次的性能之间的差距通常随着模型容量的增加而增大,这也许表明较大的模型是更熟练的元学习器


什么是 In-Context Learning

都是在一个会话内,通过 Prompt Engineering 编写 prompt:


GPT-3 架构

使用与 GPT-2 相同的模型和架​​构:

变化:

类似于稀疏变压器(Sparse Transformer)。


模型训练 Batch Size

Batch Size(批量大小)指的是在每次梯度更新时使用的数据样本数量。具体来说:

Batch Size是什么?

在大语言模型(LLM)训练过程中,Batch Size指的是每一次更新模型参数时所使用的数据样本的数量。想象一下,如果我们有一本巨大的书(全部训练数据),我们不可能一次性读完它来学习所有的内容(因为内存有限),所以我们选择一章(一个batch)一章的读,并且每读完一章,就更新一下我们的理解(模型参数)。

在自然语言处理(NLP)中,这个“章节”的大小通常是以token(比如单词或标点符号)的数量来衡量的。

例如Batch Size为0.5M,表示每个batch包含50万个token。大模型如GPT-3通常会采用较大的Batch Size如2M或3.2M,以充分利用海量数据和并行计算能力,提高训练效率。

Batch Size大小的影响

Batch Size的大小会直接影响训练的效率和效果:

为什么梯度方差很重要?

在模型训练中,我们希望模型能够从数据中学习到有用的模式,而不是被随机噪声干扰。较小的Batch Size意味着每次更新都基于较少的样本,这些样本可能不够代表整个数据集,导致梯度(即模型改进的方向)受到个别样本特征的过度影响,这就是所谓的“噪声”。

具体到你的笔记中的问题,使用太小的Batch Size(例如,每次只用1024个token进行微调)可能导致模型性能下降,因为每次更新都伴随着很大的梯度方差,使得模型难以稳定学习。

解决方案

基于你笔记里的内容,如果你在微调时遇到性能下降,你应该:

  1. 增大Batch Size:尝试使用更多的token,比如每次几千到几万个,来减少梯度的方差,帮助模型更稳定地学习。
  2. 检查样本质量:确保你的训练样本质量高,与你的目标任务高度相关。
  3. 改变微调策略:而不是单个样本微调,可以考虑整体数据集微调或采用专门设计的在线学习方法,避免灾难性忘记。
  4. 调整超参数:合理设置学习率和其他超参数,以适应不同大小的Batch Size。

较大的模型通常可以使用较大的批量大小,但需要较小的学习率


学习率

学习率(Learning Rate)则控制了每次基于梯度更新模型参数的幅度,是调节模型训练收敛速度和最终性能的关键参数。

  1. 一般来说,学习率越大,模型收敛越快,但也更容易跳出最优解;学习率较小时,训练收敛慢,但较为稳定。

  2. 较大模型通常需要较小的学习率以保证稳定收敛,如GPT-3(175B)使用0.6x10^-4的小学习率。

  3. 较小模型可以使用相对较大的学习率,如GPT-3 Small采用6.0x10^-4的学习率。

  4. 这个规律与模型规模大小有关,大模型参数空间较复杂,需要更小的学习率来精细搜索优化。


Common Crawl 语料库

GPT-3 基于 CommonCrawl 语料库进行训练。过滤前的 45TB 压缩明文和过滤后的 570GB。

我们添加了几个精选的高质量数据集:包括 WebText 数据集的扩展版本两个基于互联网的书籍语料库(Books1和Books2)、英语维基百科。


模型并行化

好的,让我来用一种简单的方式解释一下什么是模型并行化model parallelism)。

想象一下,你有一本非常厚的书,你想在一天之内读完它。但是,这本书实在太厚了,你一个人读可能来不及。所以,你决定请来四个朋友帮忙,你们五个人一起读这本书。你把书分成五部分,每个人读一部分。

在这个例子中,这本书就像一个大的机器学习模型,而你和你的朋友们一起读书的过程,就像是模型并行化。你将这个大模型分成几个小部分,每一部分在不同的计算设备上(比如不同的GPU)运行。这样做的好处是,你不需要一个超级大的内存来一次性处理整个模型,因为每个部分都是独立的,只需要相对较小的内存。

在你提供的内容中,他们提到了“模型并行化”,指的就是这种将大型模型分成若干小部分,然后在多个计算设备上同时训练这些部分的方法。这样做可以防止因模型太大而导致内存不足的问题,从而使得可以训练更大、更复杂的模型。

假设你和你的四个朋友分别读完了各自的部分。接下来,你们五个人聚在一起,每个人都会讲自己读过的那部分内容。通过讨论,大家互相分享信息,确保每个人都能理解整本书的内容。这个过程就像是将分散处理的模型结果合并起来。

在模型并行化中,当各个部分的模型在不同的计算设备上完成训练后,这些训练结果(比如权重更新、梯度信息等)需要被发送回主模型,并且合并到一起。这个合并的过程需要确保所有分散的模型部分正确地“讲述”它们各自的“故事”,以便最终得到一个完整、一致的大模型。

在实际的深度学习训练过程中,这种合并通常涉及到梯度(模型学习过程中用于调整参数的数值)的汇总。每个部分的模型计算自己的梯度,然后这些梯度被汇总到一起,以更新全局模型的参数。这就像是在每个人分享自己阅读部分的主要观点后,大家一起决定怎样最好地理解整本书的内容。通过这种方式,模型并行化不仅能处理大型模型的训练,还能确保训练过程中各部分之间能有效地合作。


训练过程中的一个 Bug

我们最初尝试通过主动搜索并尝试消除我们的训练数据与本文研究的所有基准的开发和测试集之间的任何重叠来解决污染问题。不幸的是,一个错误导致仅部分删除了训练数据中所有检测到的重叠部分。由于训练成本的原因,重新训练模型是不可行的。为了解决这个问题,我们详细调查了剩余的检测到的重叠如何影响结果。

我们得出的结论是,要么我们的保守方法大大高估了污染,要么污染对性能影响不大。


局限性

在文本合成方面,虽然整体质量很高,但 GPT-3 样本有时仍然会在文档级别上进行语义重复,在足够长的段落中开始失去连贯性,相互矛盾,并且偶尔包含不合逻辑的句子或段落。

我们当前的目标对每个标记进行同等的权重,并且缺乏预测什么是最重要的、什么是不太重要的概念。

最后,大型预训练语言模型并不基于其他经验领域,例如视频或现实世界的物理交互,因此缺乏大量关于世界的背景。

在这方面有前途的未来方向可能包括学习人类的目标函数、通过强化学习进行微调,或添加其他模式(例如图像)以提供基础和更好的世界模型

语言模型普遍存在的另一个限制是预训练期间的样本效率较差。虽然 GPT-3 在测试时样本效率方面迈出了一步,更接近人类(一次或零次),但它在预训练期间看到的文本仍然比人类一生中看到的文本多得多 。提高预训练样本效率是未来工作的一个重要方向,可能来自于物理世界的基础以提供额外的信息,或者来自于算法的改进。

关于少样本学习是否真的在推理时“从头开始”学习新任务,或者它是否只是简单地识别和识别它已经学到的任务,这一点是不明确的。

像 GPT-3 这样的大型模型包含非常广泛的技能,其中大多数对于特定任务来说并不需要,这表明原则上积极的蒸馏是可能的。


社会影响

语言模型对社会具有广泛的有益应用,包括代码和写作自动完成、语法辅助、游戏叙事生成、改进搜索引擎响应和回答问题。但它们也有潜在有害的应用。 GPT-3 提高了文本生成的质量和较小模型的适应性,并增加了区分合成文本和人类书写文本的难度。因此,它有可能促进语言模型的有益和有害的应用。

训练数据中存在的偏差可能会导致模型生成刻板印象或偏见的内容。



本文作者:Maeiee

本文链接:《Language Models are Few-Shot Learners》论文阅读

版权声明:如无特别声明,本文即为原创文章,版权归 Maeiee 所有,未经允许不得转载!


喜欢我文章的朋友请随缘打赏,鼓励我创作更多更好的作品!